Skip to content

Run the ioxide.e2e suite in the build workflow#89

Merged
MDA2AV merged 6 commits into
mainfrom
ci/run-e2e-in-build
Jun 22, 2026
Merged

Run the ioxide.e2e suite in the build workflow#89
MDA2AV merged 6 commits into
mainfrom
ci/run-e2e-in-build

Conversation

@MDA2AV

@MDA2AV MDA2AV commented Jun 22, 2026

Copy link
Copy Markdown
Owner

Runs the e2e suite (Tests/ioxide.e2e) as part of CI.

  • postgres:18 (bench/bench, trust) + redis:7-alpine service containers
  • best-effort sysctl kernel.io_uring_disabled=0 + modprobe tls before the run
  • dotnet run --project Tests/ioxide.e2e.csproj after Build, before pack/publish — a non-zero exit blocks the release
  • pg/redis/kTLS tests skip cleanly if a dependency is unreachable

Verified locally with the sidecars + tls module: 15 passed, 0 failed, 0 skipped.

MDA2AV added 6 commits June 22, 2026 13:51
Add postgres + redis service containers and run Tests/ioxide.e2e (already built as
part of ioxide.slnx) after the build, before pack/publish, so a failing test blocks
the release. The suite exits non-zero on failure and drives real reactors over real
sockets; pg/redis/kTLS tests use the sidecars + tls module and skip cleanly if absent.
Verified locally: 15 passed, 0 failed.
ioxide.pg/redis need an IPv4 literal, not 'localhost'. Also print the
io_uring_disabled sysctl state to see whether the hosted runner allows io_uring.
… container

Determine the io_uring_setup errno and whether a container can bypass the
hosted-runner block, so the e2e could run in one instead of needing self-hosted.
Pinpoint which of SINGLE_ISSUER|DEFER_TASKRUN|NO_SQARRAY (or ring size) the
hosted runner rejects, with the real errno per combination.
Probe accumulates 8192-entry rings at 8MB memlock vs raised; the e2e step raises
RLIMIT_MEMLOCK before running (ioxide rings pin memory, many reactors exhaust 8MB).
Add postgres + redis service containers and run Tests/ioxide.e2e after the build,
before pack/publish, so a failing test blocks the release. Raise RLIMIT_MEMLOCK
first: io_uring rings pin locked memory (RingEntries=8192), and the runner's
default 8 MB cap is exhausted after ~10 reactors. Load the tls module for the
kTLS test; pg/redis/kTLS skip cleanly if absent. 15 passed, 0 failed.
@MDA2AV MDA2AV merged commit 5323eeb into main Jun 22, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant